The present invention relates in general to data processing, and in particular, to ensuring fairness among classes of requests in a unified request queue by implementing dynamic reservations for queue entries.
A conventional multiprocessor data processing system includes multiple processor cores supported by a volatile memory hierarchy, including, at its upper levels, one or more cache memory hierarchies and, at its lower level, one or more system memories. Each system memory is conventionally controlled and accessed by an associated memory controller that participates in coherent communication with the cache hierarchies via a system bus.
Conventional memory controller designs employ either a unified request queue that buffers read and write requests interspersed in the entries of the same queue structure or bifurcated request queues that buffer read and write requests in separate queue structures. A conventional unified request queue allocates queue entries to memory access requests on a first-come, first served (FCFS) basis, thus enabling up to all queue entries to be allocated only to read requests or only to write requests. As compared to a bifurcated design of equivalent depth, this flexibility in entry allocation provides enhanced capacity for requests of a given type, which enables the memory controller to handle periods of read or write bursts with fewer or no retries. One disadvantage of FCFS entry allocation is that read or write requests may not, over time, receive numerically fair usage of the entries of the unified request queue. The problem of fairness has been addressed in some prior designs by statically reserving a predetermined number of entries in the unified request queue for read requests and statically reserving a predetermined number of entries in the unified request queue for write requests; however, static reservation of entries negates the desirable flexibility of unified request queues.
The issues of fairness regarding the allocation of entries of a unified request queue is not limited to simple numerical parity in the number of entries allocation to the various types of memory access requests. An additional fairness issue arises from the fact that the lifetimes of read and write requests in the entries of the unified request queue can differ substantially, as can the data bandwidth consumed by the different types of requests. These additional issues can lead to further imbalance in utilization of the unified request queue.